Spring JDBC-এ Pagination এবং Sorting বাস্তবায়ন করা খুবই সাধারণ এবং কার্যকরী। এটি সাধারণত বড় ডেটাবেস থেকে ডেটা লোড করার জন্য ব্যবহৃত হয়, যাতে আপনি প্রয়োজনীয় ডেটা ভিউ করতে পারেন এবং বাকি ডেটা প্রসেস করতে আপনার অ্যাপ্লিকেশনে ভারসাম্য বজায় থাকে। Spring JDBC-তে Pagination এবং Sorting বাস্তবায়ন করতে হলে, সাধারণত SQL কোয়েরি ব্যবহার করা হয়।
আমরা এখানে একটি উদাহরণ দেখাবো, যেখানে আমরা Spring JDBC ব্যবহার করে একটি টেবিল থেকে ডেটা পেজিনেট এবং সোর্ট করবো।
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Map;
import java.util.HashMap;
@Repository
public class UserRepository {
@Autowired
private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
// Method to fetch users with pagination and sorting
public List<User> getUsers(int pageNumber, int pageSize, String sortBy, String sortOrder) {
// Calculate offset
int offset = (pageNumber - 1) * pageSize;
// Create SQL query with sorting and pagination
String sql = "SELECT * FROM users ORDER BY " + sortBy + " " + sortOrder + " LIMIT :limit OFFSET :offset";
// Set parameters for the query
Map<String, Object> params = new HashMap<>();
params.put("limit", pageSize);
params.put("offset", offset);
// Execute query and return result
return namedParameterJdbcTemplate.query(sql, params, new UserRowMapper());
}
}
এখানে:
pageNumber
এবং pageSize
দিয়ে পেজিনেশন কনফিগার করা হয়েছে।sortBy
এবং sortOrder
দিয়ে সোর্টিং কনফিগার করা হয়েছে (যেমন, name
অনুযায়ী ASC বা DESC)।LIMIT
এবং OFFSET
SQL কোয়েরি ব্যবহার করা হয়েছে, যেখানে:LIMIT
পরিমাণ ডেটা নির্ধারণ করে (এটি এক পেজের ডেটা সংখ্যা)।OFFSET
পেজের শুরুর পজিশন নির্ধারণ করে।MapSqlParameterSource
অথবা HashMap
ব্যবহার করে প্যারামিটারগুলো দেওয়া হয়েছে (যেমন limit
, offset
ইত্যাদি)।import org.springframework.jdbc.core.RowMapper;
import java.sql.ResultSet;
import java.sql.SQLException;
public class UserRowMapper implements RowMapper<User> {
@Override
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
User user = new User();
user.setId(rs.getInt("user_id"));
user.setName(rs.getString("user_name"));
user.setEmail(rs.getString("email"));
user.setAge(rs.getInt("age"));
return user;
}
}
এখানে UserRowMapper
একটি ক্লাস যা RowMapper
ইন্টারফেসকে ইমপ্লিমেন্ট করে। এটি SQL রেজাল্ট থেকে User
অবজেক্ট তৈরি করে।
public class User {
private int id;
private String name;
private String email;
private int age;
// Getters and Setters
public int getId() { return id; }
public void setId(int id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getEmail() { return email; }
public void setEmail(String email) { this.email = email; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
}
এখানে User
একটি পিওজিও ক্লাস, যা আমাদের ডেটাবেসের ইউজার টেবিলের রেকর্ড প্রতিনিধিত্ব করে।
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public void displayUsers(int pageNumber, int pageSize, String sortBy, String sortOrder) {
// Fetch paginated and sorted users
List<User> users = userRepository.getUsers(pageNumber, pageSize, sortBy, sortOrder);
// Display users
for (User user : users) {
System.out.println(user.getId() + " - " + user.getName() + " - " + user.getEmail() + " - " + user.getAge());
}
}
}
এখানে, UserService
ক্লাসের মাধ্যমে UserRepository
এর getUsers()
মেথড কল করা হচ্ছে যেখানে পেজ নম্বর, পেজ সাইজ, সোর্ট ফিল্ড এবং সোর্ট অর্ডার প্যারামিটার হিসেবে পাঠানো হচ্ছে।
যদি আপনি এটি ওয়েব অ্যাপ্লিকেশন হিসেবে ব্যবহার করতে চান, তাহলে একটি কন্ট্রোলার তৈরি করতে পারেন, যেখানে প্যারামিটারগুলি HTTP রিকোয়েস্ট থেকে পাঠানো হবে:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/users")
public void getUsers(@RequestParam int page, @RequestParam int size,
@RequestParam String sortBy, @RequestParam String sortOrder) {
userService.displayUsers(page, size, sortBy, sortOrder);
}
}
এখানে:
@GetMapping("/users")
: HTTP GET রিকোয়েস্টে /users
URL এর জন্য কল হবে।@RequestParam
: URL থেকে প্যারামিটার (যেমন page
, size
, sortBy
, sortOrder
) গ্রহণ করা হচ্ছে।LIMIT
এবং OFFSET
SQL কোয়েরি ব্যবহার করা হয়, এবং Sorting-এর জন্য ORDER BY
ক্লজ ব্যবহার করা হয়।